"""
现代化主题配置

定义应用的颜色、字体、样式等主题配置
"""

import customtkinter as ctk
from typing import Dict, Tuple
import darkdetect

class ModernTheme:
    """现代化主题配置类"""
    
    # 颜色配置 - 支持浅色/深色模式
    COLORS = {
        # 主要颜色
        'primary': '#007AFF',           # 主题蓝色
        'primary_hover': '#0056CC',     # 主题蓝色悬停
        'secondary': '#5856D6',         # 次要紫色
        'accent': '#FF9500',            # 强调橙色
        
        # 状态颜色
        'success': '#34C759',           # 成功绿色
        'warning': '#FF9500',           # 警告橙色
        'error': '#FF3B30',             # 错误红色
        'info': '#007AFF',              # 信息蓝色
        
        # 背景颜色
        'bg_primary': ('#F2F2F7', '#1C1C1E'),      # 主背景
        'bg_secondary': ('#FFFFFF', '#2C2C2E'),     # 次背景
        'bg_tertiary': ('#F8F9FA', '#3A3A3C'),     # 三级背景
        'bg_card': ('#FFFFFF', '#2C2C2E'),         # 卡片背景
        
        # 文字颜色
        'text_primary': ('#000000', '#FFFFFF'),     # 主要文字
        'text_secondary': ('#8E8E93', '#8E8E93'),   # 次要文字
        'text_tertiary': ('#C7C7CC', '#48484A'),    # 三级文字
        'text_link': ('#007AFF', '#0A84FF'),        # 链接文字
        
        # 边框颜色
        'border_light': ('#E5E5EA', '#38383A'),     # 浅边框
        'border_medium': ('#D1D1D6', '#48484A'),    # 中等边框
        'border_dark': ('#8E8E93', '#636366'),      # 深边框
        
        # 分隔线
        'separator': ('#C6C6C8', '#38383A'),        # 分隔线
        
        # 阴影
        'shadow': ('#00000020', '#00000040'),       # 阴影颜色
    }
    
    # 字体配置
    FONTS = {
        'title': ('SF Pro Display', 28, 'bold'),       # 大标题
        'heading': ('SF Pro Display', 20, 'bold'),     # 标题
        'heading_sm': ('SF Pro Display', 16, 'bold'),  # 小标题
        'body': ('SF Pro Text', 14, 'normal'),         # 正文
        'body_sm': ('SF Pro Text', 12, 'normal'),      # 小正文
        'caption': ('SF Pro Text', 11, 'normal'),      # 说明文字
        'button': ('SF Pro Text', 14, 'normal'),       # 按钮文字
        'code': ('SF Mono', 13, 'normal'),             # 代码字体
    }
    
    # 尺寸配置
    SIZES = {
        # 圆角
        'radius_sm': 6,      # 小圆角
        'radius_md': 10,     # 中等圆角
        'radius_lg': 15,     # 大圆角
        'radius_xl': 20,     # 超大圆角
        
        # 间距
        'spacing_xs': 4,     # 超小间距
        'spacing_sm': 8,     # 小间距
        'spacing_md': 16,    # 中等间距
        'spacing_lg': 24,    # 大间距
        'spacing_xl': 32,    # 超大间距
        
        # 按钮尺寸
        'button_height_sm': 32,   # 小按钮高度
        'button_height_md': 40,   # 中等按钮高度
        'button_height_lg': 48,   # 大按钮高度
        
        # 输入框尺寸
        'input_height': 40,       # 输入框高度
        
        # 边框宽度
        'border_width': 1,        # 标准边框宽度
        'border_width_thick': 2,  # 粗边框宽度
    }
    
    # 动画配置
    ANIMATIONS = {
        'duration_fast': 150,     # 快速动画 (ms)
        'duration_normal': 250,   # 正常动画 (ms)
        'duration_slow': 400,     # 慢速动画 (ms)
        'easing': 'ease-out',     # 缓动函数
    }
    
    @classmethod
    def setup_theme(cls):
        """设置应用主题"""
        # 检测系统主题
        system_theme = darkdetect.theme()
        if system_theme:
            appearance_mode = "dark" if system_theme.lower() == "dark" else "light"
        else:
            appearance_mode = "system"
        
        # 应用主题
        ctk.set_appearance_mode(appearance_mode)
        ctk.set_default_color_theme("blue")
        
        return appearance_mode
    
    @classmethod
    def get_color(cls, color_name: str, mode: str = None) -> str:
        """获取颜色值"""
        color = cls.COLORS.get(color_name)
        if isinstance(color, tuple):
            # 根据模式返回对应颜色
            if mode == "light":
                return color[0]
            elif mode == "dark":
                return color[1]
            else:
                # 自动检测当前模式
                current_mode = ctk.get_appearance_mode()
                return color[0] if current_mode == "Light" else color[1]
        return color
    
    @classmethod
    def get_font(cls, font_name: str) -> ctk.CTkFont:
        """获取字体对象"""
        font_config = cls.FONTS.get(font_name, cls.FONTS['body'])
        return ctk.CTkFont(
            family=font_config[0],
            size=font_config[1],
            weight=font_config[2]
        )

class ComponentStyles:
    """组件样式配置"""
    
    @staticmethod
    def get_button_style(variant: str = "primary") -> Dict:
        """获取按钮样式"""
        styles = {
            "primary": {
                "fg_color": ModernTheme.COLORS['primary'],
                "hover_color": ModernTheme.COLORS['primary_hover'],
                "text_color": "white",
                "corner_radius": ModernTheme.SIZES['radius_md'],
                "border_width": 0,
                "font": ModernTheme.get_font('button'),
                "height": ModernTheme.SIZES['button_height_md']
            },
            "secondary": {
                "fg_color": "transparent",
                "hover_color": ModernTheme.get_color('bg_tertiary'),
                "text_color": ModernTheme.get_color('text_primary'),
                "corner_radius": ModernTheme.SIZES['radius_md'],
                "border_width": ModernTheme.SIZES['border_width'],
                "border_color": ModernTheme.get_color('border_medium'),
                "font": ModernTheme.get_font('button'),
                "height": ModernTheme.SIZES['button_height_md']
            },
            "success": {
                "fg_color": ModernTheme.COLORS['success'],
                "hover_color": "#2DB653",
                "text_color": "white",
                "corner_radius": ModernTheme.SIZES['radius_md'],
                "border_width": 0,
                "font": ModernTheme.get_font('button'),
                "height": ModernTheme.SIZES['button_height_md']
            },
            "warning": {
                "fg_color": ModernTheme.COLORS['warning'],
                "hover_color": "#E6850E",
                "text_color": "white",
                "corner_radius": ModernTheme.SIZES['radius_md'],
                "border_width": 0,
                "font": ModernTheme.get_font('button'),
                "height": ModernTheme.SIZES['button_height_md']
            },
            "error": {
                "fg_color": ModernTheme.COLORS['error'],
                "hover_color": "#E6342A",
                "text_color": "white",
                "corner_radius": ModernTheme.SIZES['radius_md'],
                "border_width": 0,
                "font": ModernTheme.get_font('button'),
                "height": ModernTheme.SIZES['button_height_md']
            }
        }
        return styles.get(variant, styles["primary"])
    
    @staticmethod
    def get_card_style() -> Dict:
        """获取卡片样式"""
        return {
            "fg_color": ModernTheme.get_color('bg_card'),
            "corner_radius": ModernTheme.SIZES['radius_lg'],
            "border_width": ModernTheme.SIZES['border_width'],
            "border_color": ModernTheme.get_color('border_light')
        }
    
    @staticmethod
    def get_input_style() -> Dict:
        """获取输入框样式"""
        return {
            "fg_color": ModernTheme.get_color('bg_secondary'),
            "border_color": ModernTheme.get_color('border_medium'),
            "text_color": ModernTheme.get_color('text_primary'),
            "placeholder_text_color": ModernTheme.get_color('text_secondary'),
            "corner_radius": ModernTheme.SIZES['radius_md'],
            "border_width": ModernTheme.SIZES['border_width'],
            "height": ModernTheme.SIZES['input_height'],
            "font": ModernTheme.get_font('body')
        }
